查看原文
其他

手把手一起 图形化安装k8s集群

小碗汤 进击云原生 2022-11-10


击下方卡片,关注我们,了解更多资讯


大家好,我是小碗汤,今天接着上一节,使用 KuboardSpray 图形化安装kubernetes集群[1],记录了安装时可能遇到的问题。对此项目感兴趣的同学,不妨亲手实践一下,也欢迎到github上点击star,也可以添加我微信: smallersoup 邀请您,群内有大佬为您答疑解惑~

以下记录了安装单节点(单master的集群),示例使用版本为:

  • Kuboard Spray版本为v1.0.0-alpha.1,也是截止2022.01.04最新版本。
  • 操作系统版本:CentOS Linux release 7.9.2009
  • 内核版本:3.10.0-1160.31.1.el7.x86_64

配置

Add Node添加节点:NodeName为master01,NodeRoles为控制平面、etcd节点、工作节点。具体根据自己需求来规划。

Global Config配置:

  • SSH部分需要输入用户名和密码;
  • ContainerManager部分:有containerd和docker可选择,这里选择docker

Global Config配置,OS Mirror部分,选择预置的操作系统配置源:

Kubernetes配置部分,可以自定义集群泛域名后缀,Event保留时间,是否允许匿名用户访问,kubelet日志级别,网络CIDR,节点上maxPod,网络插件有Flannel和calico可选:

ETCD配置部分,有容器化部署和二进制部署可选:

Addons开启了net_checker和Metrics,作为集群监控组件:

这里重点提一下net_checker:

Kubespray提供了一种使用 Netchecker 通过集群 IP 自动验证 Pod 到 Pod 的连接性,并检查 DNS 解析是否正常运行。这些检查由agent定期运行,并涵盖容器网络和主机网络 pod。执行检查的历史信息可以在agent应用程序日志中找到。并作为集群健康指标,报告到server,以metrics接口的方式暴露指标。



可能的报错

Apply之后,执行安装时报错:

TASK [bastion-ssh-config : set bastion host IP and port] ***********************
task path: /data/resource/spray-master-8d9ed01_k8s-v1.23.1_v1.0-amd64/content/3rd/kubespray/roles/bastion-ssh-config/tasks/main.yml:2
fatal: [bastion -> localhost]: FAILED! => {
    "msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'bastion'\n\nThe error appears to be in '/data/resource/spray-master-8d9ed01_k8s-v1.23.1_v1.0-amd64/content/3rd/kubespray/roles/bastion-ssh-config/tasks/main.yml': line 2, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n---\n- name: set bastion host IP and port\n  ^ here\n"
}

PLAY RECAP *********************************************************************
bastion                    : ok=3    changed=0    unreachable=0    failed=1    skipped=22   rescued=0    ignored=0   
localhost                  : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

根据报错信息bastion host IP and port可以猜到是跳板机host和port导致的,但我并没有enable跳板机选项:

根据报错指向的文件,到kuboard-spray容器中排查main.yml,如下:

# docker exec -ti kuboard-spray bash
root@41b1a241a852:/kuboard-spray# cat /data/resource/spray-master-8d9ed01_k8s-v1.23.1_v1.0-amd64/content/3rd/kubespray/roles/bastion-ssh-config/tasks/main.yml
---
- name: set bastion host IP and port
  set_fact:
    bastion_ip: "{{ hostvars[groups['bastion'][0]]['ansible_host'] | d(hostvars[groups['bastion'][0]]['ansible_ssh_host']) }}"
    bastion_port: "{{ hostvars[groups['bastion'][0]]['ansible_port'] | d(hostvars[groups['bastion'][0]]['ansible_ssh_port']) | d(22) }}"
  delegate_to: localhost
  connection: local

#
 省略

这里能看到需要获取跳板机(bastion)下的host和port,其实根据我们的选项,这个任务都不应该执行。

集群配置清单其实在kuboard-spray容器中/data/cluster/yourclustername/inventory.yaml文件中,其中包含了bastion信息:


root@41b1a241a852:/data/cluster/smallsoup# cat inventory.yaml 
all:
    hosts:
        bastion:
            ansible_host: ""
            ansible_user: ""

需要删除hosts.bastion。

sed -i '/bastion:/d' inventory.yaml 
sed -i '/ansible_host: ""/d' inventory.yaml 
sed -i '/ansible_user: ""/d' inventory.yaml 

这就懵逼了,跳板机host和port怎么会设置为空值呢?

事情经过是这样的:

一开始我手残点了一下enable,想看看有没有需要填写的。因为是测试环境,无需跳板机,所以就disable了。然而,这个版本有bug,disable时没有清理干净inventory.yaml中的配置,这是一个bug[2],这个bug作者会在后续版本中修复。

这个问题解决后继续安装。

继续安装

后面的安装还算顺利。重新点击Apply即可安装成功:

注意点

如果之前主机上有docker,执行安装时会reload docker,即发生重启,重启之后刷新页面重新点击Apply即可安装成功。

查看集群

# kubectl  get node
NAME       STATUS   ROLES                  AGE   VERSION
master01   Ready    control-plane,master   29m   v1.23.1

#
 systemctl status etcd

#
 kubectl  get ippool
NAME           AGE
default-pool   29m

#
 kubectl  get pod -A
NAMESPACE     NAME                                     READY   STATUS    RESTARTS      AGE
default       netchecker-agent-8fs2m                   1/1     Running   0             30m
default       netchecker-agent-hostnet-vknsm           1/1     Running   0             30m
default       netchecker-server-59fcd6bf86-5mtkn       2/2     Running   1 (30m ago)   30m
kube-system   calico-kube-controllers-bd5fc6b6-h6ghc   1/1     Running   0             31m
kube-system   calico-node-z6kwp                        1/1     Running   0             31m
kube-system   coredns-5c5b9c5cb-lb8wl                  1/1     Running   0             30m
kube-system   dns-autoscaler-7874cf6bcf-jz6qw          1/1     Running   0             30m
kube-system   kube-apiserver-master01                  1/1     Running   0             32m
kube-system   kube-controller-manager-master01         1/1     Running   1             32m
kube-system   kube-proxy-9c5tm                         1/1     Running   0             31m
kube-system   kube-scheduler-master01                  1/1     Running   1             32m
kube-system   metrics-server-6b957b8494-kmsbp          1/1     Running   0             30m
kube-system   nodelocaldns-rq79f                       1/1     Running   0             30m

可以看到

  • 一个master节点的集群创建成功
  • etcd二进制部署
  • metrics-server和netchecker正常
  • calico使用kubernetes CRD作为datastore

我们可以通过netchecker-server的地址获取指标:

curl http://{主机IP}:31081/metrics

参考资料

[1]

使用 KuboardSpray 图形化安装kubernetes集群: https://liabio.blog.csdn.net/article/details/122292548

[2]

这是一个bug: https://github.com/eip-work/kuboard-spray/issues/3





欢迎小伙伴们投稿原创文章~

投稿格式:markdown格式的md文件

投稿邮箱: pub@kubeinfo.cn


推荐阅读


k8s 集群居然可以图形化安装了?

搭建一个高可用的镜像仓库,这是我见过最详细、最简单的教程

真快!10秒内将k8s集群运行起来

这款工具,帮你轻松用手机管理 K8S 集群

6个工具助你在Windows上轻松运行Kubernetes

当年加入相互“保”,现在相互“宝”凉了!交的钱都白交了?

5 个必备的命令行工具,效率飞起

极简工具 | MacOS上运行容器和k8s | 支持M1

目前MacOS上,管理容器和k8s可选择的产品有哪些?

一款k8s实时错误监控工具,值得用起来

Docker容器如何优雅使用NVIDIA GPU

顶级工具 | Popeye帮你发现k8s集群潜在问题

Web自动化神器,批量下载小姐姐美图,可直接导入使用



点赞👍   星标✨  在看 👁 让我看见你们!!

本公众号主要分享linux、Golang、网络、云原生相关技术,实用工具,欢迎扫码关注!

点个在看你最好看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存